<?php
abstract class BaseDao{


    ////////////////Atributos da class////////////////// 
    private $servidor="localhost";
    private $usuario="root";
    private $senha="";
    private $banco="teste";
    private static $conexao=null;


    function getConexao(){
        if(self::$conexao == null){
            self::$conexao = mysqli_connect($this->servidor,$this->usuario,$this->senha,$this->banco);
            
            echo "<b><br/><br/><font color='red'>Me conectei ao banco de dados!</font><br/><br/></b>";
            //TODO: Tratar excecoes

            self::$conexao->autocommit(TRUE);
            return self::$conexao;
        }
        else{
            echo "<br/><br/>precisei do banco, mas nao precisei me conectar novamente pois a conexao ja estava disponivel!<br/><br/>";
            return self::$conexao;
        }
   }

   function getPreparedStatment($sql){
      return $this->getConexao()->prepare($sql);
   }      
   function getRecordset($sql){
      return $this->getConexao()->query($sql);
   }

   function execSql($sql){
       return $this->getRecordset($sql);
   }
   
    function getRecordsetArray($RS){
      return $RS->fetch_array(MYSQLI_BOTH);
   }

   function getQtdRegistros($RS){
      return $RS->num_rows;
   }

   function getExisteRecordset($RS){
      if( $this->getQtdRegistros($RS) >= 1)
	      return true;
	  else
	      return false;
   }
   
   function movefirst($RS){
       $RS->data_seek(0);
   }

   function moveto($RS,$qtd){
       $RS->data_seek($qtd);
   }

   function beginTransaction(){
       return $this->getConexao()->autocommit(FALSE);
   }

    function commitTransaction(){
       $this->getConexao()->commit();
       $this->getConexao()->autocommit(TRUE);
    }

    function rollbackTransaction(){
       $this->getConexao()->rollback();
       $this->getConexao()->autocommit(TRUE);
    }

    // Metodo que retorna o ultimo id de um insercao
    function lastId(){
        return $this->getConexao()->insert_id;
    }

    // Metodo fechar conexao
    function fecharConexao(){

        if(self::$conexao != null){
            echo "<b><br/><br/>destruindo conexao existente!<br/></b>";

            //fecha a conexao
            $retorno = self::$conexao->close();

            //anula a conexao
            echo "<b>Setado null no atributo privado da conexao!<br/></b>";
            echo "<b><font color='green'>Conexao fechada!</font><br/><br/></b>";
            self::$conexao = null;
            return $retorno;
        }
                
        echo "<b>Liberou a conexao, ela ja estava fechada!<br/></b>";
        echo "<b><font color='blue'>Conexao fechada!</font><br/><br/></b>";

        return true;
    }
	
    function anti_sql_injection($string){
        $string = get_magic_quotes_gpc() ? stripslashes($string) : $string;
        $string = $this->getConexao()->real_escape_string($string);
        return $string;
    }
   
}
?>
